
#include <set>
#include <cstdio>
#include "common.hpp"
#include "addr.hpp"
#include "log.hpp"
class com
{

public:
    com()
    {
        _whitelist.insert("ls");
        _whitelist.insert("ls -al");
        _whitelist.insert("pwd");
        _whitelist.insert("tree");
        _whitelist.insert("whoami");
    }
    bool iswhitelist(const string cd)
    {
        auto it = _whitelist.find(cd);
        return it != _whitelist.end();
    }

    string excute(const string cd, inetaddr ir)
    {
        if (!iswhitelist(cd))
        {
            return "无法执行！！！";
        }
        FILE *fp = popen(cd.c_str(), "r");//process open ：先去执行对应的命令然后写入文件中；在以读的形式打开这个文件
        if (fp == nullptr)
        {
            return "执行失败！！！";
        }
        string ans;
        char line[1024]; // 要么满了结束要么读到\n
        while (fgets(line, sizeof(line), fp))
        {
            ans += line;
        }
        fclose(fp);
         return ir.get_userinfo()+" 执行命令完毕，结果是# ：\n "+ans;
       
    }
    ~com() {}

private:
    set<string> _whitelist;
};